package com.yunhe.security.security;


import io.jsonwebtoken.*;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 生成token需要加入jjwt 依赖
 */
@Component
public class TokenManager {

//    token有效时长
    private long tokenEcpiration = 24*60*60*1000;
    
//    编码密钥
    private String tokenSignKey = "123456";
    
//    根据用户名生成token
    public String createToken(String username){
        /*Jwts.builder()  生成token  根据什么来生成token呢？
         .setSubject(username)   ---- 把条件传入其中来生成token
         .setExpiration(new Date(System.currentTimeMillis() + tokenEcpiration))
                     设置有效时长，当前时间加上自己设置的毫秒值，就得到了过期的时间
         .signWith(SignatureAlgorithm.HS512, tokenSignKey)
                .compressWith(CompressionCodecs.GZIP).compact();
           对token进行加密，固定写法。
           */
        String token = Jwts.builder().setSubject(username)
                .setExpiration(new Date(System.currentTimeMillis() + tokenEcpiration))
                .signWith(SignatureAlgorithm.HS512, tokenSignKey)
                .compressWith(CompressionCodecs.GZIP).compact();
        return token;
    }
//      根据token字符串得到用户信息
    public String getUserInfoFormToken(String token){
        /*Jwts.parser() 解析， 那么根据什么解析呢？
        .setSigningKey(tokenSignKey) 因为我们在上方方法定义时使用tokenSignKey作为了编码，所以现在根据他来解码
        .parseClaimsJws(token)   传入需要解析的字符串
        .getBody().getSubject()   就可以得到用户信息*/
        String userinfo = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token).getBody().getSubject();
        return userinfo;
    }

}
